# 作业1：使用while和for…in两个循环分别输出四种九九乘法表效果（共计8个）

# format格式化输出，{:}冒号前面表示第几个参数，冒号后面填写格式化命令
# print使用end参数指定输出结束符
# range[start, end, step=1] 生成一个从start到end(不包括end)，步长为step的序列迭代器

# 使用for…in
# y * x = z
# 利用range生成一个区间为[1, 9]的有序序列，遍历子项作为乘数x;
# 利用range生成一个区间为[1. x]的有序序列，遍历子项作为乘数y, 做乘法运算有y*x，遍历完则换行;
# 向左对齐  正序输出+倒序输出
print("{:*^150s}".format("solution-1-1"))
for x in range(1, 10):
    for y in range(1, x + 1):
        print("{0} * {1} = {2:<2d}".format(y, x, y * x), end="    ")
    print("")

print("\n{:*^150s}".format("solution-1-2"))
for x in range(9, 0, -1):
    for y in range(1, x + 1):
        print("{0} * {1} = {2}".format(y, x, y * x), end="\t")
    print("")

# string.join(sequence) 利用join函数来拼接序列的元素值
# 将九九乘法表的每一行的每个子项保存在同一个列表中，共9个列表；
# 对这9个列表，使用空格将每个列表的子项拼接成一个字符串保存在另一个大列表；
# 使用换行符将大列表的子项拼接成一个字符串
# 向右对齐  正序输出+倒序输出
print("\n{:*^150s}".format("solution-1-3"))
#print('\n'.join(['    '.join(["{0} * {1} = {2:<2d}".format(y, x, y * x) for y in range(1, x + 1)]) for x in range(1, 10)]))
multiList = ['    '.join(["{0} * {1} = {2:<2d}".format(y, x, y * x) for y in range(1, x + 1)]) for x in range(1, 10)]
for tmpstr in multiList:
    print("{:>125s}".format(tmpstr))


print("\n{:*^150s}".format("solution-1-4"))
#print('\n'.join(['\t'.join(["{0} * {1} = {2:<2d}".format(y, x, y * x) for y in range(1, x + 1)]) for x in range(9, 0, -1)]))
multiList = ['    '.join(["{0} * {1} = {2:<2d}".format(y, x, y * x) for y in range(1, x + 1)]) for x in range(9, 0, -1)]
for tmpstr in multiList:
    print("{:>125s}".format(tmpstr))



# 使用while
# 向左对齐  正序输出+倒序输出
print("\n{:*^150s}".format("solution-2-1"))
x = 1
while x < 10:
    y = 1
    while y < x + 1:
        print("{0} * {1} = {2:<2d}".format(y, x, y * x), end="\t")
        y += 1
    x += 1
    print("")

print("\n{:*^150s}".format("solution-2-2"))
x = 9
while x > 0:
    y = 1
    while y < x + 1:
        print("{0} * {1} = {2:<2d}".format(y, x, y * x), end="\t")
        y += 1
    x -= 1
    print("")

# 使用死循环+添加判断跳出
# 向右对齐  正序输出+倒序输出
print("\n{:*^150s}".format("solution-2-3"))
itemWidth = 14
x = 1
while True:
    y = 1
    print("{}".format(" " * (itemWidth * (9 - x))), end="")
    while True:
        print("{0} * {1} = {2:<2d}".format(y, x, y * x), end="    ")
        y += 1
        if y >= x + 1:
            break

    print("")
    x += 1
    if x >= 10:
        break

print("\n{:*^150s}".format("solution-2-4"))
x = 9
while True:
    y = 1
    print("{}".format(" " * (itemWidth * (9 - x))), end="")
    while True:
        print("{0} * {1} = {2:<2d}".format(y, x, y * x), end="    ")
        y += 1
        if y >= x + 1:
            break

    print("")
    x -= 1
    if x <= 0:
        break

